package com.google.jguery.client;

import java.util.Date;
import java.util.Set;

import org.timepedia.exporter.client.Exporter;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.query.client.Function;
import com.google.gwt.query.client.GQuery;
import com.google.gwt.user.client.Event;
import com.google.jguery.client.analyzer.Analyzer;
import com.google.jguery.client.analyzer.StandardAnalyzer;
import com.google.jguery.client.index.Index;
import com.google.jguery.client.index.Table;
import com.google.jguery.client.query.And;
import com.google.jguery.client.query.Searcher;

import static com.google.gwt.query.client.GQuery.$;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class JGuery implements EntryPoint {	
	
	class BooleanSetable {
		boolean value = false;
		BooleanSetable() {			
		}
		
		BooleanSetable(boolean value) {
			this.value = value;
		}
		boolean getValue() {
			return value;
		}
		void setValue(boolean value) {
			this.value = value;
		}
	}
	
	/**
	 * This is the entry point method.
	 */
	public void onModuleLoad() {
		try {
			Exporter exporter = (Exporter) GWT.create(jGuery.class);
			exporter.export();
		} catch (Exception e) {
			
		}
//		
//		final Table termTable = new Table();		
//		final Index index = new Index(termTable);
//		final And testAnd = new And();
//		final Analyzer analyzer = new StandardAnalyzer();
//		final Searcher searcher = new Searcher();
//		final StringBuilder indexFieldName = new StringBuilder();
//		final BooleanSetable indexedOnce = new BooleanSetable(false);		
//		
//		$("#button0").click(new Function() {
//			GQuery indexField = $("#index");
//			GQuery indexStats = $("#indexStats");
//			public boolean f(Event e) {				
//				indexFieldName.delete(0, indexFieldName.length());
//				indexFieldName.append(indexField.val());
//				Element[] eles = $(indexField.val()).elements();
//				termTable.clear();
//				int docId = 0;
//				Date start = new Date();
//				for (Element ele : eles) {					
//					termTable.update(docId, ele.getInnerText(), analyzer);
//					docId++;
//				}
//				Date stop = new Date();
//				searcher.setDocCountAll(docId);
//				searcher.setIndex(index);
//				indexStats.html("total number of documents indexed: " + Integer.toString(docId) + "; time for building the index: " + (stop.getTime() - start.getTime()) +"ms");
//				return false;
//			}
//		});
//		
//		$("#button1").click(new Function() {
//			GQuery queryStats = $("#queryStats");
//			GQuery queryField = $("#query");
//			public boolean f(Event e) {
//				if (!indexedOnce.getValue()) {
//					$("#button0").click();
//					indexedOnce.setValue(true);
//				}
//				
//				String text = queryField.val().trim();
//				if (text.isEmpty()) {
//					$(indexFieldName.toString()).show();
//					queryStats.text("");
//					return false;
//				}
//				testAnd.setQueries(text, analyzer);
//				String msg = "No result";
//				Set<Integer> ids = testAnd.getDocIds(searcher);
//				Element[] eles = $(indexFieldName.toString()).hide().elements();
//				if (ids != null && ids.size()>0) {
//					msg = "matched docs: ";
//					for (Integer id : ids) {
//						msg += id + " ,";
//					}					
//					for (int id : ids) {
//						new GQuery(eles[id]).show();
//					}
//				}				
//				queryStats.text(msg);
//				return false;
//			}
//		});
	}
}